﻿using System;
using System.Diagnostics.Contracts;

namespace O1.Data.Traversal
{
    [ContractVerification(true)]
    public class Filter
    {
        public virtual PropertyInterests PropertyInterest 
        {
            get
            { 
                return PropertyInterests.All; 
            }
        }

        public virtual ObservationInterests CheckVersion(CellVersion version)
        {
            return ObservationInterests.Interested;
        }

        public virtual ObservationInterests StartVertex(CellAddress vertex)
        {
            return ObservationInterests.Interested;
        }
        
        public virtual ObservationInterests StartEdge(Edge edge, EdgeDirections direction)
        {
            return ObservationInterests.Interested;
        }

        public virtual ObservationInterests EndVertex(ObservationInterests vertexState)
        {
            return ObservationInterests.Interested;
        }

        public virtual ObservationInterests EndEdge(ObservationInterests edgeState)
        {
            return ObservationInterests.Interested;
        }

        public virtual ObservationInterests Evaluate(DecimalProperty value)
        {
            return ObservationInterests.Interested;
        }

        public virtual ObservationInterests Evaluate(DateProperty value)
        {
            return ObservationInterests.Interested;
        }

        public virtual ObservationInterests Evaluate(DateTimeProperty value)
        {
            return ObservationInterests.Interested;
        }

        public virtual ObservationInterests Evaluate(Int16Property value)
        {
            return ObservationInterests.Interested;
        }

        public virtual ObservationInterests Evaluate(Int32Property value)
        {
            return ObservationInterests.Interested;
        }

        public virtual ObservationInterests Evaluate(Int64Property value)
        {
            return ObservationInterests.Interested;
        }

        public virtual ObservationInterests Evaluate(StringProperty value)
        {
            return ObservationInterests.Interested;
        }

        public virtual ObservationInterests Evaluate(HashProperty value)
        {
            return ObservationInterests.Interested;
        }
    }
}
